<?php

use think\migration\Migrator;
use think\migration\db\Column;

class CreateUsersTable extends Migrator
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
     *
     * The following commands can be used in this method and Phinx will
     * automatically reverse them when rolling back:
     *
     *    createTable
     *    renameTable
     *    addColumn
     *    renameColumn
     *    addIndex
     *    addForeignKey
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function change()
    {
        $table = $this->table('think_users', [
            'id' => 'id',
            'signed' => true,
            'primary_key' => 'id',
            'auto_increment' => true
        ]);

        $table
            ->addColumn('phone', 'string', [
                'limit' => 20,
                'null' => true,
                'comment' => '手机号',
                'default' => null
            ])
            ->addColumn('email', 'string', [
                'limit' => 100,
                'null' => true,
                'comment' => '邮箱',
                'default' => null
            ])
            ->addColumn('user_number', 'string', [
                'limit' => 32,
                'null' => false,
                'comment' => '用户号'
            ])
            ->addColumn('user_apple_user_id', 'string', [
                'null' => true,
                'comment' => '用户的Apple登录UserID'
            ])
            ->addColumn('nickname', 'string', [
                'limit' => 20,
                'null' => true,
                'comment' => '昵称',
                'default' => ''
            ])
            ->addColumn('avatar', 'string', [
                'limit' => 255,
                'null' => true,
                'comment' => '用户头像',
                'default' => ''
            ])
            ->addColumn('token', 'string', [
                'null' => true,
                'comment' => '用户令牌',
                'default' => ''
            ])
            ->addColumn('gender', 'integer', [
                'limit' => 1,
                'null' => true,
                'comment' => '性别：0未知 1男 2女',
                'default' => 0
            ])
            ->addColumn('apns_token', 'string', [
                'null' => true,
                'comment' => 'APNS推送token',
                'default' => ''
            ])
            ->addColumn('location_push_token', 'string', [
                'null' => true,
                'comment' => '位置推送token',
                'default' => ''
            ])
            ->addColumn('language', 'string', [
                'null' => true,
                'comment' => '用户语言',
                'default' => 'en'
            ])
            ->addColumn('tags', 'json', [
                'null' => true,
                'comment' => '用户标签'
            ])
            ->addColumn('birthday', 'date', [
                'null' => true,
                'comment' => '出生日期'
            ])
            ->addColumn('location', 'json', [
                'null' => true,
                'comment' => '用户位置'
            ])
            ->addColumn('bio', 'text', [
                'null' => true,
                'comment' => '自我描述'
            ])
            ->addColumn('score', 'decimal', [
                'precision' => 10,
                'scale' => 2,
                'null' => true,
                'default' => 0.00,
                'comment' => '用户得分'
            ])
            ->addColumn('is_vip', 'boolean', [
                'null' => false,
                'default' => false,
                'comment' => '是否为VIP用户'
            ])
            ->addColumn('vip_level', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => 'VIP等级'
            ])
            ->addColumn('last_login_time', 'timestamp', [
                'null' => true,
                'comment' => '最后登录时间'
            ])
            ->addColumn('create_time', 'timestamp', [
                'null' => true,
                'comment' => '创建时间'
            ])
            ->addColumn('update_time', 'timestamp', [
                'null' => true,
                'comment' => '更新时间'
            ])
            ->addColumn('status', 'integer', [
                'limit' => 1,
                'null' => false,
                'default' => 1,
                'comment' => '用户状态：0禁用 1正常'
            ])
            ->addColumn('is_verified', 'boolean', [
                'null' => false,
                'default' => false,
                'comment' => '是否已验证'
            ])
            ->addColumn('verified_time', 'timestamp', [
                'null' => true,
                'comment' => '验证时间'
            ])
            ->addColumn('last_active_time', 'timestamp', [
                'null' => true,
                'comment' => '最后活跃时间'
            ])
            ->addColumn('vip_expire_date', 'timestamp', [
                'null' => true,
                'comment' => 'VIP过期时间'
            ])
            ->addColumn('online', 'boolean', [
                'null' => false,
                'default' => false,
                'comment' => '用户是否在线'
            ])
            ->addColumn('uuid', 'char', [
                'null' => false,
            ])
            ->addColumn('height', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '用户身高'
            ])
            ->addColumn('weight', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '用户体重'
            ])
            ->addColumn('order_count', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '用户订单数量'
            ])
            ->addColumn('message_price', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '纯文字聊天每分钟的价格'
            ])
            ->addColumn('audio_price', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '音频通话每分钟的价格'
            ])
            ->addColumn('video_price', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '视频通话的价格'
            ])
            ->addColumn('user_balance', 'integer', [
                'null' => true,
                'default' => 0,
                'comment' => '用户的余额'
            ])
            ->addIndex(['phone'], ['unique' => true])
            ->addIndex(['email'], ['unique' => true])
            ->addIndex(['user_number'], ['unique' => true])
            ->addIndex(['user_apple_user_id'], ['unique'=>true])
            ->addIndex(['token'], ['unique' => false])
            ->create();
    }
}
